/**  
* @Title: SendMail.java
* @Package com.lemon.utils.SMS.email
* @Description: (一句话阐述):
* @author Ran_cc
* @date 2018年5月31日
* @version V1.0  
*/
package com.lemon.utils.SMS.email;

import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import com.lemon.conf.MyException;
import com.lemon.utils.StringUtil;
import com.sun.mail.util.MailSSLSocketFactory;

/**
 * <p>
 * Title:
 * </p>
 * <p>
 * Description:邮箱发送信息
 * </p>
 * <p>
 * Company:
 * </p>
 * 
 * @author Ran_cc
 * @date 2018年5月31日
 * @版本 V 1.0
 */
public class SendMail {

	private static final String HOST = "smtp.qq.com";
	private static final String PROTOCOL = "smtp";
	private static final int PORT = 25;
	private static final String SENDER = "346533165@qq.com";//  发件人

	private static final String DEBUG = "true";

	private static final String ACCOUNT = "346533165"; //邮箱的登陆账号
	private static final String PASSWORD = "abhrpdrnhgctcaje"; //邮箱的登陆密码. qq邮箱用第三方授权码登陆

	//	public static String REGIST_CONTENT = "<h4>尊敬的用户, 您的验证码为:</h4><span style='color:red;'></span> ";

	/**
	 * <b>Description:<em><blockquote>
	 * 发送邮件
	 * </blockquote></em></b>
	 * 
	 * @Title: sendEmail
	 * @param subject 主题
	 * @param content 内容
	 * @param sendTO 接受者
	 * @param sendCC 抄送者
	 * @param sendBCC 密送者
	 * @return
	 * @author Ran_cc
	 * @date 2018年6月1日
	 */
	public static boolean sendEmail( String subject, String content, String sendTO, String sendCC, String sendBCC ) {
		boolean message = getMessage(subject, content, sendTO, sendCC, sendBCC);
		return message;
	}

	/**
	 * <b>Description:<em><blockquote>
	 * 发送邮件
	 * </blockquote></em></b>
	 * 
	 * @Title: sendEmail
	 * @param subject 主题
	 * @param content 内容
	 * @param sendTO 接受者
	 * @return
	 * @author Ran_cc
	 * @date 2018年6月1日
	 */
	public static boolean sendEmail( String subject, String content, String sendTO, String sendCC ) {
		boolean message = getMessage(subject, content, sendTO, sendCC, "");
		return message;
	}

	/**
	 * <b>Description:<em><blockquote>
	 * 发送邮件
	 * </blockquote></em></b>
	 * 
	 * @Title: sendEmail
	 * @param subject 主题
	 * @param content 内容
	 * @param sendTO 接受者
	 * @return
	 * @author Ran_cc
	 * @date 2018年6月1日
	 */
	public static boolean sendEmail( String subject, String content, String sendTO ) {
		boolean message = getMessage(subject, content, sendTO, "", "");
		return message;
	}
	
	/**
	 * 获取用于发送邮件的Session
	 * 
	 * @return
	 */
	public static Session getSession() throws Exception {
		Properties prop = new Properties();
		// 开启debug调试，以便在控制台查看
		prop.setProperty("mail.debug", DEBUG);
		// 设置邮件服务器主机名
		prop.setProperty("mail.host", HOST);
		// 发送服务器需要身份验证
		prop.setProperty("mail.smtp.auth", "true");
		// 发送邮件协议名称
		prop.setProperty("mail.transport.protocol", PROTOCOL);
		// 开启SSL加密，否则会失败
		MailSSLSocketFactory sf = new MailSSLSocketFactory();
		sf.setTrustAllHosts(true);
		prop.put("mail.smtp.ssl.enable", "true");
		prop.put("mail.smtp.ssl.socketFactory", sf);
		// 创建session
		Session session = Session.getInstance(prop);
		return session;
	}
	/**
	 * <b>Description:<em><blockquote>
	 * 发送邮件
	 * </blockquote></em></b>
	 * 
	 * @Title: sendEmail 发送邮件
	 * @param sendTO 接收人
	 * @param sendCC 抄送人
	 * @param sendBCC 密送人
	 * @param subject 标题
	 * @param content 内容
	 * @return
	 * @author Ran_cc
	 * @date 2018年6月1日
	 */
	public static boolean getMessage( String subject, String content, String sendTO, String sendCC, String sendBCC ) {
		try {
			Session session = getSession();
			// 创建邮件对象
			MimeMessage message = new MimeMessage(session);
			// 指明邮件的发件人
			message.setFrom(new InternetAddress(SENDER));
			// 指明邮件的收件人，现在发件人和收件人是一样的，那就是自己给自己发
			if ( !StringUtil.isEmpty(sendTO) ) {
				message.setRecipient(Message.RecipientType.TO, new InternetAddress(sendTO)); //接受者
			}
			if ( !StringUtil.isEmpty(sendCC) ) {
				message.setRecipient(Message.RecipientType.CC, new InternetAddress(sendCC)); // 抄送
			}
			if ( !StringUtil.isEmpty(sendBCC) ) {
				message.setRecipient(Message.RecipientType.BCC, new InternetAddress(sendBCC)); //密送
			}
			// 邮件的标题
			message.setSubject(subject);
			// 邮件的文本内容
			message.setContent(content, "text/html;charset=UTF-8");
			// 返回创建好的邮件对象
			// 通过session得到transport对象
			Transport ts = session.getTransport();
			// 连接邮件服务器：邮箱类型，帐号，授权码代替密码（更安全）
			ts.connect(HOST, ACCOUNT, PASSWORD);//后面的字符是授权码，用qq密码反正我是失败了（用自己的，别用我的，这个号是我瞎编的，为了。。。。）
			// 发送邮件
			ts.sendMessage(message, message.getAllRecipients());
			ts.close();
			return true;
		} catch (Exception e) {
			//将错误信息输出到日志
			MyException.writeErr(e, "发送邮件失败:标题:" + subject + ",收件人:" + sendTO);
		}
		return false;
	}

	public static void main( String [] args ) {
		try {
			boolean sendEmail = SendMail.sendEmail("这是一个测试的标题信息", "<h1>此邮件为官方激活邮件！请点击下面链接完成激活操作！</h1><h3><a href='http://i.lemon-sea.com/'>http://i.lemon-sea.com/</a></h3>", "346533165@qq.com");
			System.out.println(sendEmail);
		} catch (Exception e) {
			//将错误信息输出到日志
			MyException.writeErr(e, "error info");
		}
	}

}

